package com.j2ee.JDKProxy;

import java.lang.reflect.Proxy;

import org.junit.Test;

/**
 * 拦截器原理分析：
 * 1、产生的代理类与目标类的接口是什么关系？
 * 		代理类实现了目标类的接口
 * 2、代理类中方法体的内容是什么？
 * 		方法体中的内容就是拦截器中invoke方法体中的内容
 * 3、拦截器的作用是什么？
 * 		完成invoke方法体中的内容
 * 4、拦截器中的invoke方法的参数method是什么？
 * 		客户端代理对象调用的方法作为invoke方法中method的实参
 * 5、拦截器中的invoke方法是什么？
 * 		是代理类的方法
 * @author LC
 *
 */
public class JDKProxyTest {
	
	@Test
	public void testJDKProxy() {
		//创建目标类对象
		Object target = new PersonDaoImpl() ;
		//创建事务对象
		Transaction transaction = new Transaction() ;
		//创建拦截器对象
		MyInterceptor interceptor = new MyInterceptor(target, transaction) ;
		/**
		 * 创建目标类代理对象——实现了目标类的接口
		 * 第一个参数：类加载器
		 * 第二个参数：目标类实现的所有接口
		 * 第三个参数：拦截器
		 */
		PersonDao personDao = (PersonDao) Proxy.newProxyInstance(target.getClass().getClassLoader(), 
				target.getClass().getInterfaces(), interceptor) ;
		personDao.savePerson();
		personDao.updatePerson() ;
	}

}
